<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>肯德基</title>
</head>
<body>
    
</body>
</html>


<script>
    //肯德基
    //下面是模拟肯德基吃饭的事情，使用promise操作异步的方式每个阶段都很清楚
    //准备阶段  pending
    //准备成功  fulfilled
    //准备失败   rejected

    /*
    let kfc = new Promise((resolve,reject) => {
        console.log("肯德基厨房开始做饭了");
        resolve("我是肯德基,您的餐已经做好了");
        // reject("没有煤气了,暂时做不了");
    });
    
    let dad = kfc.then(msg => {
        setTimeout(() => {
            console.log(`收到肯德基消息 : ${msg}`)
        },3000);
        return {
            then(resolve){
                setTimeout(() => {
                    resolve("孩子，我吃了两秒,不辣,你可以吃了");
                },3000);
            }
        };
    });

    let son = dad.then(msg => {
        return new Promise((resolve,reject) => {
            console.log(`收到爸爸消息:${msg}`);
            setTimeout(() => {
                resolve("妈妈，我把饭吃完了");
            },3000);
        });
    });

    let mama = son.then(msg => {
        console.log(`收到孩子的消息:${msg},事情结束`);
    });
    */

    /*

   //而使用以往的回调方式，就会让人苦不堪言
   function notice(msg,then){
        then(msg);
   }

   function meal(){
       notice("肯德基厨房开始做饭了",msg => {
           console.log(msg);
           notice("我是肯德基,您的餐已经做好了",msg => {
               console.log(`收到肯德基的消息:${msg}`);
               setTimeout(() => {
                   notice("孩子,我吃了两秒了,不辣，你可以吃了",msg => {
                       console.log(`收到爸爸的消息:${msg}`);
                       setTimeout(() => {
                           notice("妈妈,我吃完饭了",msg => {
                                console.log(`收到孩子消息:${msg},事情结束`);
                           });
                       },2000);
                   });
               },2000);
           });
       });
   }
   meal();

   */

   //Promise包含pending,fulfilled,reject 三种状态
   //pending 指初始等待状态，是实话promise时的状态
   //resolve 指的已经解决,将promise状态设置未fulfilled
   //reject 指的是拒绝处理 将promise状态设置为reject
   //promise是生产者，通过resolve与reject函数告诉结果
   //promise 非常适合需要一定执行事件的异步任务

   //promise没有使用resolve或者reject更改状态的时候，状态为pennding
//    console.log(
//        new Promise((resolve,reject) => {

//        })
//    );

//    //当更改状态之后
//    console.log(
//        new Promise((resolve,reject) => {
//          resolve('fulffilled')  
//        })
//    );

//    console.log(
//        new Promise((resolve,reject) => {
//             reject("rejected");
//        })
//    );



//promise创建的时候就执行同步任务,then会放在异步微任务钟执行，但是需要等同步任务执行完成之后最后才执行
// let promise = new Promise((resolve,reject) => {
//     resolve("fulfilled");
//     console.log("后盾人");
// });

// promise.then(msg => {
//     console.log(msg);
// });

// console.log("houdurnas.com");

//先执行主任务，再执行异步任务
// const promise = new Promise(resolve => resolve("success"));
// promise.then(() => {
//     alert("后盾人");
// });
// alert("houdunren.com");


// new Promise((resolve,reject) => {
//     setTimeout(() => {
//         // resolve("fulfilled");
//         reject("erros");
//     },3000);
// }).then(
//     msg => {
//         console.log(msg);
//     },
//     error => {
//         console.log(error)
//     }
// );


//状态被改变之后就不能再修改了，下面通过resolve改变状态为成功状态,表示promise状态
//已经完成，就不能再次使用reject更改状态了
// new Promise((resolve,reject) => {
//     resolve("操作成功");
//     reject(new Error("请求失败"));
// }).then(
//     msg => {
//         console.log(msg);
//     },
//     error => {
//         console.log(error)
//     }
// );





  
</script>